/* 
 * File:   ServerConfFileManager.h
 * Author: nahuel
 *
 * Created on May 23, 2013, 9:53 PM
 */

#ifndef SERVERCONFFILEMANAGER_H
#define	SERVERCONFFILEMANAGER_H

#include <string>
#include "common_tinyxml.h"
/**
 * @class ServerConfFileManager
 * Maneja el archivo de configuración de datos del Servidor
 */
class ServerConfFileManager {
    private:
        /*
         * Nombre de nodos
         */
        static std::string generalNodeName;
            static std::string pathAuNodeName;            
        
        static std::string conexionNodeName;            
            static std::string puertoServidorNodeName;
            static std::string timeoutClientesNodeName;
        
        TiXmlDocument* _confFile;
        std::string _filePath;
        
        /**
         *  @brief Constructor que crea el archivo de configuracion. Se utiliza 
         *  cuando no se encuentra el archivo solicitado.
         *  
         */
        void _CrearArchivo();
        
    public:
        /**
         * @brief Si no existe el Archivo de configuración del Servidor lo crea.
         */
        ServerConfFileManager(const std::string& filePath);
        
        /**
         * @brief Obtiene el Path de Archivos Ubicuos
         * @return Path de archivos ubicuos
         */
        std::string GetPathAU();
        
         /**
         * @brief Obtiene el puerto donde va a escuchar el Servidor
         * @return Número de puerto
         */
        std::string GetPuertoServidor();
        
        /**
         * @brief Obtiene el tiempo de timeout limite para aceptar conexiones
         * @return Tiempo de Timeout
         */
        unsigned int GetTimeoutClientes();
        
         /**
         * @brief Setea el directorio de Archivos Ubicuos
         * @param pathAu path del directorio de Archivos Ubicuos
         * @return VOID
         */
        void SetPathAU(const std::string& pathAu);    
        
         /**
         * @brief Define el puerto en donde escuchará el Servidor
         * @param puertoServidor Número de Puerto
         * @return VOID
         */
        void SetPuertoServidor(std::string& puertoServer);
        
        /**
         * @brief Define el tiempo de timeout limite para aceptar conexiones
         * @param timeout Tiempo de timeout
         */
        void SetTimeoutClientes(unsigned int timeout);
        
        /**
         * @brief Guarda los cambios en el XML de configuración
         * @return VOID
         */
        void SaveChanges();
        
        /**
         * @brief Destructor que libera los recursos utilizados
         */
        virtual ~ServerConfFileManager();
};

#endif	/* SERVERCONFFILEMANAGER_H */

